/*
连接：https://leetcode.cn/problems/swap-nodes-in-pairs/description/
题目：两两交换链表中的节点
简介：递归解题


算法思路：
1. 递归函数的含义：交给你⼀个链表，将这个链表两两交换⼀下，然后返回交换后的头结点；
2. 函数体：先去处理⼀下第⼆个结点往后的链表，然后再把当前的两个结点交换⼀下，连接上后⾯处
理后的链表；
3. 递归出⼝：当前结点为空或者当前只有⼀个结点的时候，不⽤交换，直接返回。
注意注意注意：链表的题⼀定要画图，搞清楚指针的操作！
*/

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head==nullptr||head->next==nullptr)
        {
            return head;
        }

        ListNode* tmp = swapPairs(head->next->next);
        ListNode* root =  head->next;
        head->next->next = head;
        head->next = tmp;
        return root;
    }
};